#ifndef SIMUBOARD_TASK_H
#define SIMUBOARD_TASK_H

#ifdef __cplusplus
extern "C" {



#endif

// 纯 C + pthread 任务模型
// 学生只需要修改 src/Task/Task.c 中的 task_thread_func 函数体即可。
// 其它线程创建/回收逻辑已封装在此头文件（不需要学生接触）。
// 注意：未做任何线程安全同步；GUI 线程与此后台线程对 port 的并发访问在标准中属数据竞争，
// 仅用于教学演示，让学生理解“看似可用但并不严谨”的情况。

#include <stdint.h>
#include <stdio.h>
#include <pthread.h>
#include <stdbool.h>
#include <Core/GPIO.h>

// 全局变量（定义在 Task.c 中）
extern pthread_t g_task_thread;

// 用户实现的线程函数（位于 Task.c）
void* user_main(void* arg);


// 启动后台线程
static void task_init(void)
{
    GPIO.DIR |= 0xFFFF;
    if (pthread_create(&g_task_thread, NULL, user_main, NULL) != 0)
    {
        perror("pthread_create 失败");
    }
}

// 请求结束后台线程并等待回收
static void task_cleanup(void)
{
    if (g_task_thread)
    {
        pthread_join(g_task_thread, NULL);
        g_task_thread = 0;
    }
}

#ifdef __cplusplus
}

#endif

#endif //SIMUBOARD_TASK_H
